package com.malou.client.pagos.pagoletras;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.store.Store;
import com.extjs.gxt.ui.client.util.IconHelper;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Label;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.DateField;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnData;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer;
import com.extjs.gxt.ui.client.widget.grid.filters.DateFilter;
import com.extjs.gxt.ui.client.widget.grid.filters.DateFilter.DateFilterMessages;
import com.extjs.gxt.ui.client.widget.grid.filters.GridFilters;
import com.extjs.gxt.ui.client.widget.grid.filters.NumericFilter;
import com.extjs.gxt.ui.client.widget.grid.filters.StringFilter;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.toolbar.PagingToolBar;
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.malou.client.MalouConstants;
import com.malou.client.util.RemoteStoreFilterField;
import com.malou.client.util.Utilities;

public class HistorialLetrasPanel extends ContentPanel {
	private MalouConstants k = GWT.create(MalouConstants.class);
	private Button btnBuscar;
	private DateField fechadesde;
	private DateField fechahasta;
	private ToolBar toolbar;
	private PagingToolBar toolBarPag;
	private List<ColumnConfig> columns;

	private ColumnModel cm;
	public Grid<BeanModel> grid;

	private GridFilters filters;
	@SuppressWarnings("unused")
	private String text = null;
	private RemoteStoreFilterField<BeanModel> filterField;

	@SuppressWarnings({ "rawtypes", "unchecked" })
	public HistorialLetrasPanel() {
		super();
		setBodyBorder(false);
		setBorders(false);
		setHeaderVisible(false);
		setIcon(IconHelper.createPath("images/icons/table.png"));
		setLayout(new FitLayout());

		
		Letras.getPaginateHistorial();

		btnBuscar = new Button(k.find(),
				IconHelper.createPath("images/icons/find.png"));
		btnBuscar.addSelectionListener(new SelectionListener<ButtonEvent>() {
			@Override
			public void componentSelected(ButtonEvent ce) {
				if (fechadesde.getValue() != null
						|| fechahasta.getValue() != null) {

					if (fechadesde.getValue().compareTo(fechahasta.getValue()) <= 0) {

						Letras.desde = fechadesde.getValue();
						Letras.hasta = fechahasta.getValue();
						Letras.loaderhistorial.load();
					} else
						MessageBox.alert(k.sistemaMarcocruzado(),
								"Fecha inicial debe ser mayor que fecha final",
								null);

				} else
					MessageBox.alert(k.sistemaMarcocruzado(),
							"Fecha nula, no es valido", null);

			}
		});
		btnBuscar.setStyleAttribute("marginLeft", "25px");

		toolbar = new ToolBar();

		fechadesde = new DateField();
		fechadesde.setValue(new Date());
		fechadesde.setAllowBlank(false);
		fechadesde.getPropertyEditor().setFormat(DateTimeFormat.getFormat("yyyy-MM-dd"));

		fechahasta = new DateField();
		fechahasta.setValue(new Date());
		fechahasta.setAllowBlank(false);
		fechahasta.getPropertyEditor().setFormat(DateTimeFormat.getFormat("yyyy-MM-dd"));

		DateFilter fechaFilter = new DateFilter("fechavencimiento");

		DateFilterMessages dm = new DateFilterMessages();
		dm.setAfterText(k.despues());
		dm.setBeforeText(k.antes());
		dm.setOnText(k.del());
		fechaFilter.setMessages(dm);

		filters = new GridFilters();
		filters.addFilter(new StringFilter("proveedor"));
		filters.addFilter(new StringFilter("ruc"));
		filters.addFilter(new StringFilter("dni"));
		filters.addFilter(new StringFilter("banco"));
		filters.addFilter(new StringFilter("numeroletra"));
		filters.addFilter(new StringFilter("numerodocumento"));
		filters.addFilter(new NumericFilter("monto"));
		filters.addFilter(fechaFilter);

		filterField = new RemoteStoreFilterField() {

			@Override
			protected void handleOnFilter(String filter) {
				if (filter == null || filter.equals(""))
					text = null;
				else
					text = filter.toLowerCase();
				Letras.filter = filter;
				Letras.loaderhistorial.load();
			}

			@Override
			protected boolean doSelect(Store store, ModelData parent,
					ModelData record, String property, String filter) {
				String name = record.get("nombres");

				name = name.toLowerCase();

				if (name.startsWith(filter.toLowerCase())) {
					return true;
				}
				return false;
			}
		};
		filterField.bind(Letras.storehistorial);
		filterField.setEmptyText(k.letraBuscar());
		filterField.setWidth(250);

		Label label = new Label(k.letrasProveedor() + ":");
		label.setStyleAttribute("marginLeft", "10px");

		Label desde = new Label(k.desde());
		desde.setStyleAttribute("marginLeft", "10px");

		Label hasta = new Label(k.hasta());
		hasta.setStyleAttribute("marginLeft", "25px");

		toolbar.add(label);
		toolbar.add(filterField);
		toolbar.add(new SeparatorToolItem());
		toolbar.add(desde);
		toolbar.add(fechadesde);
		toolbar.add(hasta);
		toolbar.add(fechahasta);
		toolbar.add(btnBuscar);

		toolBarPag = new PagingToolBar(Utilities.itemsPerPage);
		toolBarPag.bind(Letras.loaderhistorial);

		columns = new ArrayList<ColumnConfig>();

		columns.add(new ColumnConfig("proveedor", k.letrasProveedor(), 200));
		columns.add(new ColumnConfig("ruc", k.proveedorRuc(), 100));
		columns.add(new ColumnConfig("dni", k.proveedorDni(), 100));
		columns.add(new ColumnConfig("banco", k.letraBanco(), 150));
		columns.add(new ColumnConfig("numeroletra", k.letraNumeroUnico(), 100));
		columns.add(new ColumnConfig("numerodocumento", k
				.letraNumeroDocumento(), 100));
		columns.add(new ColumnConfig("monto", k.letraMonto(), 100));
		ColumnConfig fecha = new ColumnConfig("fechavencimiento",
				k.letraFechaVencimiento(), 100);
		fecha.setDateTimeFormat(DateTimeFormat.getFormat("yyyy-MM-dd"));
		columns.add(fecha);

		GridCellRenderer<BeanModel> estado = new GridCellRenderer<BeanModel>() {
			@Override
			public Object render(BeanModel model, String property,
					ColumnData config, int rowIndex, int colIndex,
					ListStore<BeanModel> store, Grid<BeanModel> grid) {

				String val = (String) model.get(property);
				int estadoletra_id = (Integer) model.get("estadoletra_id");
				String style = "";
				if (estadoletra_id == 2)
					style = "red";
				else if (estadoletra_id == 3)
					style = "blue";

				return "<span qtitle='"
						+ cm.getColumnById(property).getHeader() + "' qtip='"
						+ val + "' style='font-weight: bold;color:" + style
						+ "'>" + val + "</span>";
			}
		};

		ColumnConfig column = new ColumnConfig("estado", k.letraEstado(), 80);
		column.setAlignment(HorizontalAlignment.RIGHT);
		column.setRenderer(estado);
		columns.add(column);

		cm = new ColumnModel(columns);

		grid = new Grid<BeanModel>(Letras.storehistorial, cm);
		grid.setAutoExpandColumn("proveedor");
		grid.setLoadMask(true);
		grid.addPlugin(filters);


		setTopComponent(toolbar);
		setBottomComponent(toolBarPag);
		add(grid);

	}
}